#pragma once

//lut for bessel function
const double Bessel_lut1[8] = {1.000, 1.2661, 2.2796, 4.8808, 11.3019, 27.2399, 67.2344, 168.5939};
//0-7:N = 7; 8-15:N = 11; 16-23:N = 15; 24-31:N = 19; 32-39:N = 23; 40-47:N = 27; 48-55:N = 31; 56-63:N = 35
const double Bessel_lut2[64][36] = 
{
	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.144,1.235,1.266,1.235,1.144,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.638,2.107,2.280,2.107,1.638,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.699,4.252,4.881,4.252,2.699,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,4.808,9.286,11.302,9.286,4.808,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,8.940,21.120,27.240,21.120,8.940,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,17.058,49.209,67.234,49.209,17.058,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,33.099,116.501,168.594,116.501,33.099,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},

	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.092,1.167,1.221,1.255,1.266,1.255,1.221,1.167,1.092,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.394,1.750,2.034,2.217,2.280,2.217,2.034,1.750,1.394,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.990,3.049,3.994,4.648,4.881,4.648,3.994,3.049,1.990,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,3.049,5.747,8.490,10.541,11.302,10.541,8.490,5.747,3.049,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,4.881,11.302,18.801,24.892,27.240,24.892,18.801,11.302,4.881,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,8.028,22.794,42.660,60.202,67.234,60.202,42.660,22.794,8.028,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,13.442,46.738,98.361,147.926,168.594,147.926,98.361,46.738,13.442,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},

	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.067,1.126,1.176,1.215,1.243,1.260,1.266,1.260,1.243,1.215,1.176,1.126,1.067,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.283,1.553,1.796,1.999,2.152,2.247,2.280,2.247,2.152,1.999,1.796,1.553,1.283,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.692,2.446,3.196,3.874,4.413,4.761,4.881,4.761,4.413,3.874,3.196,2.446,1.692,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.378,4.155,6.153,8.124,9.792,10.909,11.302,10.909,9.792,8.124,6.153,4.155,2.378,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,3.486,7.374,12.358,17.753,22.624,26.021,27.240,26.021,22.624,17.753,12.358,7.374,3.486,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,5.253,13.432,25.451,39.757,53.544,63.565,67.234,63.565,53.544,39.757,25.451,13.432,5.253,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,8.065,24.892,53.285,90.476,128.756,157.759,168.594,157.759,128.756,90.476,53.285,24.892,8.065,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},

	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.053,1.101,1.144,1.180,1.211,1.235,1.252,1.263,1.266,1.263,1.252,1.235,1.211,1.180,1.144,1.101,1.053,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.221,1.436,1.638,1.820,1.979,2.107,2.202,2.260,2.280,2.260,2.202,2.107,1.979,1.820,1.638,1.436,1.221,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.531,2.107,2.699,3.276,3.804,4.252,4.594,4.808,4.881,4.808,4.594,4.252,3.804,3.276,2.699,2.107,1.531,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.033,3.326,4.808,6.378,7.915,9.286,10.369,11.063,11.302,11.063,10.369,9.286,7.915,6.378,4.808,3.326,2.033,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.810,5.483,8.940,12.953,17.162,21.120,24.366,26.497,27.240,26.497,24.366,21.120,17.162,12.953,8.940,5.483,2.810,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,3.992,9.286,17.058,26.971,38.134,49.209,58.644,64.994,67.234,64.994,58.644,49.209,38.134,26.971,17.058,9.286,3.992,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,5.780,16.007,33.099,57.085,86.113,116.501,143.405,161.966,168.594,161.966,143.405,116.501,86.113,57.085,33.099,16.007,5.780,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},

	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.044,1.084,1.121,1.154,1.183,1.208,1.229,1.245,1.257,1.264,1.266,1.264,1.257,1.245,1.229,1.208,1.183,1.154,1.121,1.084,1.044,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.181,1.359,1.530,1.690,1.836,1.965,2.075,2.163,2.227,2.266,2.280,2.266,2.227,2.163,2.075,1.965,1.836,1.690,1.530,1.359,1.181,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.430,1.894,2.376,2.860,3.326,3.759,4.140,4.453,4.687,4.832,4.881,4.832,4.687,4.453,4.140,3.759,3.326,2.860,2.376,1.894,1.430,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.824,2.829,3.981,5.232,6.522,7.780,8.935,9.919,10.671,11.141,11.302,11.141,10.671,9.919,8.935,7.780,6.522,5.232,3.981,2.829,1.824,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.417,4.413,6.967,9.993,13.334,16.782,20.092,23.006,25.287,26.741,27.240,26.741,25.287,23.006,20.092,16.782,13.334,9.993,6.967,4.413,2.417,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,3.289,7.073,12.519,19.577,27.951,37.100,46.285,54.657,61.376,65.728,67.234,65.728,61.376,54.657,46.285,37.100,27.951,19.577,12.519,7.073,3.289,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,4.562,11.546,22.884,38.999,59.559,83.351,108.344,131.933,151.348,164.132,168.594,164.132,151.348,131.933,108.344,83.351,59.559,38.999,22.884,11.546,4.562,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},

	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.037,1.072,1.105,1.134,1.161,1.186,1.207,1.225,1.239,1.251,1.259,1.264,1.266,1.264,1.259,1.251,1.239,1.225,1.207,1.186,1.161,1.134,1.105,1.072,1.037,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.153,1.305,1.452,1.593,1.725,1.847,1.956,2.052,2.132,2.196,2.242,2.270,2.280,2.270,2.242,2.196,2.132,2.052,1.956,1.847,1.725,1.593,1.452,1.305,1.153,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.362,1.749,2.152,2.563,2.969,3.361,3.727,4.057,4.342,4.572,4.742,4.846,4.881,4.846,4.742,4.572,4.342,4.057,3.727,3.361,2.969,2.563,2.152,1.749,1.362,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.685,2.503,3.434,4.454,5.529,6.620,7.686,8.682,9.565,10.298,10.847,11.187,11.302,11.187,10.847,10.298,9.565,8.682,7.686,6.620,5.529,4.454,3.434,2.503,1.685,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.162,3.737,5.723,8.082,10.743,13.599,16.519,19.354,21.948,24.151,25.830,26.882,27.240,26.882,25.830,24.151,21.948,19.354,16.519,13.599,10.743,8.082,5.723,3.737,2.162,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.846,5.736,9.797,15.053,21.408,28.636,36.385,44.206,51.588,58.011,62.995,66.153,67.234,66.153,62.995,58.011,51.588,44.206,36.385,28.636,21.408,15.053,9.797,5.736,2.846,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,3.819,8.969,17.068,28.516,43.379,61.296,81.448,102.601,123.205,141.574,156.085,165.389,168.594,165.389,156.085,141.574,123.205,102.601,81.448,61.296,43.379,28.516,17.068,8.969,3.819,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},

	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.032,1.063,1.092,1.119,1.144,1.167,1.187,1.205,1.221,1.235,1.246,1.255,1.261,1.265,1.266,1.265,1.261,1.255,1.246,1.235,1.221,1.205,1.187,1.167,1.144,1.119,1.092,1.063,1.032,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.133,1.265,1.394,1.518,1.638,1.750,1.854,1.949,2.034,2.107,2.168,2.217,2.251,2.273,2.280,2.273,2.251,2.217,2.168,2.107,2.034,1.949,1.854,1.750,1.638,1.518,1.394,1.265,1.133,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.312,1.643,1.990,2.344,2.699,3.049,3.386,3.704,3.994,4.252,4.472,4.648,4.776,4.854,4.881,4.854,4.776,4.648,4.472,4.252,3.994,3.704,3.386,3.049,2.699,2.344,1.990,1.643,1.312,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.586,2.273,3.049,3.901,4.808,5.747,6.693,7.616,8.490,9.286,9.977,10.541,10.959,11.215,11.302,11.215,10.959,10.541,9.977,9.286,8.490,7.616,6.693,5.747,4.808,3.901,3.049,2.273,1.586,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.983,3.276,4.881,6.781,8.940,11.302,13.793,16.325,18.801,21.120,23.181,24.892,26.175,26.971,27.240,26.971,26.175,24.892,23.181,21.120,18.801,16.325,13.793,11.302,8.940,6.781,4.881,3.276,1.983,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,2.543,4.854,8.028,12.104,17.058,22.794,29.141,35.860,42.660,49.209,55.165,60.202,64.029,66.421,67.234,66.421,64.029,60.202,55.165,49.209,42.660,35.860,29.141,22.794,17.058,12.104,8.028,4.854,2.543,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,3.323,7.330,13.442,21.980,33.099,46.738,62.581,80.058,98.361,116.501,133.388,147.926,159.121,166.182,168.594,166.182,159.121,147.926,133.388,116.501,98.361,80.058,62.581,46.738,33.099,21.980,13.442,7.330,3.323,1.000,1.000,1.000,1.000,1.000,1.000
},

	{1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000
},
	{1.000,1.029,1.056,1.082,1.107,1.129,1.151,1.170,1.188,1.204,1.219,1.231,1.242,1.250,1.257,1.262,1.265,1.266,1.265,1.262,1.257,1.250,1.242,1.231,1.219,1.204,1.188,1.170,1.151,1.129,1.107,1.082,1.056,1.029,1.000,1.000
},
	{1.000,1.117,1.234,1.349,1.460,1.568,1.671,1.769,1.860,1.944,2.020,2.087,2.145,2.193,2.230,2.258,2.274,2.280,2.274,2.258,2.230,2.193,2.145,2.087,2.020,1.944,1.860,1.769,1.671,1.568,1.460,1.349,1.234,1.117,1.000,1.000
},
	{1.000,1.274,1.564,1.866,2.176,2.490,2.803,3.110,3.406,3.686,3.945,4.180,4.386,4.560,4.699,4.799,4.860,4.881,4.860,4.799,4.699,4.560,4.386,4.180,3.945,3.686,3.406,3.110,2.803,2.490,2.176,1.866,1.564,1.274,1.000,1.000
},
	{1.000,1.512,2.102,2.766,3.492,4.269,5.082,5.914,6.748,7.563,8.341,9.061,9.707,10.260,10.706,11.034,11.235,11.302,11.235,11.034,10.706,10.260,9.707,9.061,8.341,7.563,6.748,5.914,5.082,4.269,3.492,2.766,2.102,1.512,1.000,1.000
},
	{1.000,1.852,2.943,4.279,5.852,7.642,9.617,11.734,13.941,16.177,18.373,20.460,22.369,24.035,25.397,26.408,27.030,27.240,27.030,26.408,25.397,24.035,22.369,20.460,18.373,16.177,13.941,11.734,9.617,7.642,5.852,4.279,2.943,1.852,1.000,1.000
},
	{1.000,2.324,4.236,6.805,10.073,14.041,18.670,23.875,29.528,35.460,41.468,47.329,52.806,57.669,61.704,64.727,66.600,67.234,66.600,64.727,61.704,57.669,52.806,47.329,41.468,35.460,29.528,23.875,18.670,14.041,10.073,6.805,4.236,2.324,1.000,1.000
},
	{1.000,2.971,6.212,11.022,17.646,26.244,36.858,49.386,63.571,78.998,95.113,111.246,126.658,140.586,152.305,161.179,166.713,168.594,166.713,161.179,152.305,140.586,126.658,111.246,95.113,78.998,63.571,49.386,36.858,26.244,17.646,11.022,6.212,2.971,1.000,1.000
},
};
